package br.com.viaembratel.model.endereco;

import br.com.viaembratel.modulointegrador.vialivre.enderecov1.ConsultarRequest;
import br.com.viaembratel.modulointegrador.vialivre.enderecov1.ConsultarResponse;
import br.com.viaembratel.modulointegrador.vialivre.enderecov1.EnderecoPortType;
import br.com.viaembratel.modulointegrador.vialivre.enderecov1.EnderecoService;
import br.com.viaembratel.modulointegrador.vialivre.enderecov1.NumeroType;
import br.com.viaembratel.vialivre.modelo.ged.endereco.v1_0_0.types.EnderecosType;

import br.com.viaembratel.vialivre.modelo.ged.endereco.v1_0_0.types.UFType;

import javax.ejb.Stateless;

import javax.xml.ws.WebServiceRef;

import weblogic.utils.StringUtils;

@Stateless(name = "EnderecoEJB", mappedName = "ViaLivreWeb-Model-EnderecoEJB")
public class EnderecoEJBBean implements EnderecoEJBLocal {
    
    @WebServiceRef
    EnderecoService enderecoService;
    
    public EnderecoEJBBean() {
    }

    public EnderecosType pesquisaEndereco(String logradouro, String numero,
                                        String numeroAte, String idCidade,
                                        String uf, String bairro, String cep) {


        EnderecoPortType enderecoPortType =
            enderecoService.getEnderecoSOAP11Port();
        
        ConsultarRequest request = new ConsultarRequest();

        if (!StringUtils.isEmptyString(cep)) {
        
            request.setCep(cep);
            
        } else {
            
            request.setIdentificadorCidade(new Integer(idCidade));
            request.setLogradouro(logradouro);
            request.setUf(UFType.valueOf(uf));
            
            NumeroType numeroType = new NumeroType();
            if (!StringUtils.isEmptyString(numeroAte)) {
                
                numeroType.setNumeroDe(!StringUtils.isEmptyString(numero) ?
                                       numero : null);
                numeroType.setNumeroAte(numeroAte);
                request.setNumero(numeroType);
                
            } else if (!StringUtils.isEmptyString(numero)) {
                
                numeroType.setNumero(numero);
                request.setNumero(numeroType);
                
            }

        }

        ConsultarResponse response = enderecoPortType.consultar(request);

        return response.getEnderecos();
    }    
    
}
